package controller;

import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Vector;

import data.AdmPersistConsorcio;
import data.AdmPersistDetalleDeuda;
import data.AdmPersistPropietario;
import data.AdmPersistProveedor;
import model.*;

public class Sistema {

	private Vector<Consorcio> consorcios;
	private Vector<Proveedor> proveedores;
	private Vector<Propietario> propietarios;
	private static Sistema instancia;
	
private Sistema(){
	this.consorcios = new Vector<Consorcio>();
	this.proveedores = new Vector<Proveedor>();
	this.propietarios = new Vector<Propietario>();	
}

public static Sistema getInstancia(){
	if(instancia==null)
		instancia=new Sistema();
	return instancia;
}

public void altaDepartamento (String nombreConsorcio,String nombre, String apellido, float porcentaje,int unidadFuncional,int piso,String letra,int cocheras){
	Consorcio c = this.buscarConsorcio(nombreConsorcio);
	Propietario p = this.buscarPropietario(nombre, apellido);
	c.altaDepartamento(p, porcentaje, unidadFuncional, piso, letra, cocheras);
}

public void registrarReclamo(String nombreConsorcio, Calendar fecha, int unidadFuncional, String descripcion, String urgencia){
	Consorcio c = this.buscarConsorcio(nombreConsorcio);
	c.registrarReclamo(fecha, unidadFuncional, descripcion, urgencia);
}

public void registrarPresupuesto(String nombreConsorcio, int nroReclamo, Calendar fecha, String razonSocial, Calendar fechaValidez, Vector<ItemPresupuesto> items, boolean estado){
	Consorcio c = this.buscarConsorcio(nombreConsorcio);
	Proveedor p = this.buscarProveedor(razonSocial);
	c.registrarPresupuesto(fecha, fechaValidez, items, p, nroReclamo, estado);
}

public int generarDetalleDeuda(Calendar fecha, BigDecimal interes, int unidadFuncional, String nombreConsorcio){
	Consorcio c = this.buscarConsorcio(nombreConsorcio);
	return c.generarDetalleDeuda(fecha, interes, unidadFuncional);
}

public Vector<Vector<String>> obtenerDatosDeuda(String nombreConsorcio, int nroDetalleDeuda){
	Consorcio c = this.buscarConsorcio(nombreConsorcio);
	return c.obtenerDatosDeuda(nroDetalleDeuda);
}
public Vector<Vector<String>> obtenerDatosReclamo(String nombreConsorcio, int unidadFuncional, Calendar desde, Calendar hasta){
	Consorcio c = this.buscarConsorcio(nombreConsorcio);
	return c.obtenerDatosReclamo(unidadFuncional, desde, hasta);
}

public Object[][] obtenerDatosData(String nombreConsorcio, int nroDetalleDeuda){
	Consorcio c = this.buscarConsorcio(nombreConsorcio);
	Vector<Vector<String>> vect = c.obtenerDatosDeuda(nroDetalleDeuda);
	Object[][] data = new Object[vect.size()][];
	for(int i=0;i<vect.size();i++){
		data[i] = this.toObject(vect.elementAt(i));
	}
	return data;
	//return c.obtenerDatos(nroDetalleDeuda);
}

private Object[] toObject(Vector<String> v){
	Object[] propiedades = {v.elementAt(0),v.elementAt(1),v.elementAt(2),v.elementAt(3)};
	return propiedades;
}

public String getTotalDetalleDeuda(String nombreConsorcio, int nroDetalleDeuda){
	Consorcio c = this.buscarConsorcio(nombreConsorcio);
	return c.getTotalDetalleDeuda(nroDetalleDeuda);
}

private Consorcio buscarConsorcio(String nombreConsorcio){
	for (int i=0; i<consorcios.size();i++){
		if (consorcios.elementAt(i).getNombre().equals(nombreConsorcio))
			return consorcios.elementAt(i);
	}
	return AdmPersistConsorcio.getInstancia().buscarConsorcio(nombreConsorcio);
}

private Propietario buscarPropietario(String nombre, String apellido){
	for (int i=0; i<propietarios.size();i++){
		if (propietarios.elementAt(i).getNombre().equals(nombre)&&propietarios.elementAt(i).getApellido().equals(apellido))
			return propietarios.elementAt(i);
	}
	return AdmPersistPropietario.getInstancia().buscarPropietario(nombre,apellido);
}

public String getPropietario(String nombreConsorcio, int unidadFuncional){
	Consorcio con = buscarConsorcio(nombreConsorcio);
	Departamento depto = con.buscarDepartamento(unidadFuncional);
	return depto.getPropietario().toString();
}

public String getDepartamento(String nombreConsorcio, int unidadFuncional){
	Consorcio con = buscarConsorcio(nombreConsorcio);
	Departamento depto = con.buscarDepartamento(unidadFuncional);
	return depto.toString();
}

private Proveedor buscarProveedor (int cuit){
	for (int i=0; i<proveedores.size();i++){
		if (proveedores.elementAt(i).getCuit() == cuit)
			return proveedores.elementAt(i);
	}
	return AdmPersistProveedor.getInstancia().buscarProveedor(cuit);
}

private Proveedor buscarProveedor (String razonSocial){
	for (int i=0; i<proveedores.size();i++){
		if (proveedores.elementAt(i).getRazonSocial().equals(razonSocial))
			return proveedores.elementAt(i);
	}
	return AdmPersistProveedor.getInstancia().buscarProveedor(razonSocial);
}

public Vector<Consorcio> getConsorcios(){
	return AdmPersistConsorcio.getInstancia().selectAll();
}

public Vector<Departamento> getDepartamentos(String consorcio){
	Consorcio con = buscarConsorcio(consorcio);
	return con.getDepartamentos();	
}

public Vector<Proveedor> getProveedores(){
	return AdmPersistProveedor.getInstancia().selectAll();
}

public Vector<ProveedorView> getProveedoresView(){
	Vector<Proveedor> proveedores = AdmPersistProveedor.getInstancia().selectAll();
	Vector<ProveedorView> proveedoresView = new Vector<ProveedorView>();
	for (int i=0;i<proveedores.size();i++)
		proveedoresView.addElement(proveedores.elementAt(i).getView());
	
	return proveedoresView;
		
}

}


